
import os
import shutil
from pathlib import Path
# 一共 2322 个资源    283+2322=2605


def findAllFile(base):
    for root, ds, fs in os.walk(base):
        for f in fs:
            if f.startswith("."):
                print(".打头文件，忽略....")
            else:
                fullname = os.path.join(root, f)
                p = os.path.abspath(root)
                b = os.path.basename(p)#从文件路径中读取最后一个文件夹的名字,如有含有地址，把地址截取掉，只保留 2022年8月10日 这种格式
                print(">>>>>>>>>>>>>>>>>>>>>b="+ b)
                if b.startswith("2"):
                    print("不需要格式化")
                else:
                    lastIndex = b.rfind(",")
                    lastIndexRi = b.rfind("日")
                    if lastIndex == -1:
                        lastIndex = -2
                    b = b[lastIndex+2: lastIndexRi+1]
                print(">>>>>>>>>>>>>>>>>>>>?>>>>>>>>>>>NEW-b="+ b)
                
                print("目录名字："+ p +",===== 文件名字：" + f+",====文件全路径名："+fullname + ",====最后一级路径："+b)
                oldPath = os.path.abspath(fullname)
                print("文件路径"+ oldPath)
                parentPath = os.path.abspath(os.path.dirname(os.path.dirname(os.path.abspath(fullname))))
                print("上级目录是:{}".format(parentPath))
                newErPath = parentPath +"/" + b
                print("新的二级目录是:{}".format(newErPath))
                if "," in p:
                    print("目录名字中包含了 , 这个符号。。。。。。。需要重命名（也就是把 , 之前的给截掉）。。。")
                    newPath = newErPath
                    print("重命名>>>>>老路径："+p +", 新路径："+newPath)
                    if os.path.exists(p):
                        if not os.listdir(p): # 空目录可以重命名 29+18+79
                            os.rename(p, newPath)
                        else:
                            newPath = newPath+"(2)"
                            os.rename(p, newPath)
                    else:
                        print("目录不存在，无法进行其他操作.........")

    print("开始拷贝。。。。。。。")



def step2():
    # 指定目录 下的所有 目录名字
    entries = os.listdir(rootDir)
    entriesCp = []
    entriesSet = set("")

    for entry in entries:
        if entry.startswith("."):
            print("此文件忽略....")
        else:
            lastIndex = entry.rfind(",")
            print("目录名为：" + entry +", lastIndex = "+ str(lastIndex))
            if lastIndex == -1:
                lastIndex = -2
            lastIndexRi = entry.rfind("日")
            prefix = entry[lastIndex+2: lastIndexRi+1]  # 目录的前缀
            print("prefix = " +prefix)
            monthIndex = prefix.rfind("月")
            monthFileName = entry[0:monthIndex+1]
            print("monthIndex ========== " + str(monthIndex) + ",               monthFileName = "+monthFileName)
            
            entriesCp.append(monthFileName)
            entriesSet.add(monthFileName)

    print("------------------前缀--entriesCp-----------------")
    for entry in entriesCp:
        print("前缀===" + entry)

    print("--------------------set 遍历---------创建月份的目录--------")
    for entry in entriesSet:
        print("set 遍历===" + entry)
        p = Path(rootDir+"/"+entry)
        p.mkdir(exist_ok=True)


    print("-----------------将月份的分目录，移动到该月份统一的目录中-----------")

    # shutil.move('1/2022年8月17日', "1/2022年8月")

    for entry in entries:
        print("最终  文件  entry = "+entry)
        if entry.startswith("."):
            print("此文件忽略....")
        else:
            monthIndex = entry.rfind("月")
            prefix = entry[0: monthIndex+1]  # 目录的前缀
            print("entries 的 entry = " + entry + ", prefix = " + prefix+",       monthIndex="+str(monthIndex))

            if prefix in entriesSet:
                print("prefix 包含在了 entriesSet 中的")
                print("老路劲："+rootDir+"/"+entry+",,,,,,,,,,,新路径："+rootDir+"/"+prefix)
                shutil.move(rootDir+"/"+entry, rootDir+"/"+prefix)



def renameAllFile(base):
    for root, ds, fs in os.walk(base):
        for f in fs:
            if f.startswith("."):
                print(".打头文件，忽略....")
            else:
                fullname = os.path.join(root, f)
                p = os.path.abspath(root)
                b = os.path.basename(p)#从文件路径中读取最后一个文件夹的名字,如有含有地址，把地址截取掉，只保留 2022年8月10日 这种格式
                print(">>>>>>>>>>>>>>>>>>>>>b="+ b)
                if b.startswith("2"):
                    print("不需要格式化")
                else:
                    lastIndex = b.rfind(",")
                    if lastIndex == -1:
                        lastIndex = -2
                    b = b[lastIndex+2: lastIndex+9]
                print(">>>>>>>>>>>>>>>>>>>>?>>>>>>>>>>>NEW-b="+ b)
                
                print("目录名字："+ p +",===== 文件名字：" + f+",====文件全路径名："+fullname + ",====最后一级路径："+b)
                print("文件路径"+ os.path.abspath(fullname))
                parentPath = os.path.abspath(os.path.dirname(os.path.dirname(os.path.abspath(fullname))))
                print("上级目录是:{}".format(parentPath))
                if f.startswith("20"):
                    print("已经命名了")
                    # oldPath = os.path.abspath(fullname)
                    # shutil.move(oldPath, parentPath)
                else:
                    oldPath = os.path.abspath(fullname)
                    newPath = p + "/"+b+"_"+ f
                    print("文件路径-new"+ os.path.abspath(newPath))
                    os.rename(oldPath, newPath)

                    # oldPath = os.path.abspath(newPath)
                    # shutil.move(newPath, parentPath)
                    shutil.copy2(newPath, parentPath)
                    os.remove(newPath)
        # yield fullname            


# 删除空文件夹
def delete_empty_folders(directory):
    # 遍历当前目录下的所有文件夹
    for root, dirs, files in os.walk(directory, topdown=False):
        for folder in dirs:
            folder_path = os.path.join(root, folder)
            # 打印文件夹路径
            print("当前文件夹路径：" + folder_path)
            
            # 获取文件夹内容并过滤掉 .DS_Store 文件
            folder_contents = [f for f in os.listdir(folder_path) if f != '.DS_Store']
            print(f"文件夹内容: {folder_contents}")
            
            # 如果文件夹内容为空，则删除
            if not folder_contents:
                try:
                    shutil.rmtree(folder_path)  # 使用 shutil 删除目录及所有内容
                    print(f"已删除空文件夹: {folder_path}")
                except OSError as e:
                    print(f"删除文件夹失败: {folder_path}, 错误: {e}")


rootDir = "003"

print("-----------------预备，开始--------------------")
print("----------------开始第一步--------------------")
# findAllFile(rootDir)
print("----------------开始第二步--------------------")
step2()
print("----------------开始重命名文件--------------------")
renameAllFile(rootDir)
print("----------------开始删除空文件夹--------------------")
delete_empty_folders(rootDir)
print("操作结束................................................................................")
